import { CoolValidateException } from "@cool-midway/core"
import { Rule, RuleType } from "@midwayjs/validate"

/**
 * 产品项DTO
 */
export class ProductItemDTO {
    @Rule(RuleType.string().required().error(new CoolValidateException('请输入产品项名称')))
    name: string
    @Rule(RuleType.number().required().error(new CoolValidateException('请输入产品项价格')))
    price: number
    @Rule(RuleType.number().required().error(new CoolValidateException('请输入产品项库存')))
    stock: number

    @Rule(RuleType.array().items(RuleType.object().schema({
        name: RuleType.string().required().error(new CoolValidateException('请输入产品项规格名称')),
        value: RuleType.string().required().error(new CoolValidateException('请输入产品项规格值'))
    }).required().error(new CoolValidateException('请输入产品项规格'))))
    specs: {
        name: string
        value: string
    }[]
    @Rule(RuleType.date().optional().error(new CoolValidateException('请输入产品项日期')))
    date?: Date
}


/**
 * 退款配置DTO
 */
export class RefundConfigDTO {
    @Rule(RuleType.string().required().error(new CoolValidateException('请输入退款类型')))
    type: 'fixed' | 'percentage'
    @Rule(RuleType.number().required().error(new CoolValidateException('请输入退款金额或比例')))
    value: number
}

/**
 * 新增产品DTO
 */
export class AddProductDTO {
    @Rule(RuleType.string().required().error(new CoolValidateException('请输入产品名称')))
    name: string

    @Rule(RuleType.string().required().error(new CoolValidateException('请输入产品封面')))
    cover: string

    @Rule(RuleType.string().required().error(new CoolValidateException('请输入产品详情')))
    content: string

    @Rule(RuleType.number().required().error(new CoolValidateException('请输入产品价格')))
    basePrice: number

    @Rule(RuleType.array().items(RuleType.object().schema({
        name: RuleType.string().required().error(new CoolValidateException('请输入产品规格名称')),
        value: RuleType.array().items(RuleType.string().required().error(new CoolValidateException('请输入产品规格值'))).required().error(new CoolValidateException('请输入产品规格值'))
    }).required().error(new CoolValidateException('请输入产品规格'))))
    specs: {
        name: string
        value: string[]
    }[]

    @Rule(RuleType.array().required().error(new CoolValidateException('请输入产品图片')))
    images: string[]

    @Rule(RuleType.string().required().error(new CoolValidateException('请输入产品类型')))
    type: string


    @Rule(RuleType.array().items(RuleType.object().schema(ProductItemDTO).required().error(new CoolValidateException('请输入产品项'))))
    productItems: ProductItemDTO[]

    @Rule(RuleType.array().items(RuleType.object().schema(RefundConfigDTO).required().error(new CoolValidateException('请输入退款配置'))))
    refundConfigs: RefundConfigDTO[]


}